সি++ স্ট্যান্ডার্ড লাইব্রেরিতে কনটেইনার অ্যাডাপ্টার হিসেবে তিনটি গুরুত্বপূর্ণ ক্লাস রয়েছে: std::stack, std::queue, এবং std::priority_queue। এদেরকে কনটেইনার অ্যাডাপ্টার বলা হয় কারণ এরা মূল কনটেইনারের কার্যকারিতা (যেমন vector, deque, বা list) ব্যবহার করে নতুন ধরনের অ্যাক্সেস নিয়ম তৈরি করে। এই কনটেইনার অ্যাডাপ্টারগুলো ডেটা অ্যাক্সেস করার ভিন্ন ধরণ প্রদান করে, যা বিভিন্ন প্রোগ্রামিং সমস্যা সমাধানে সহায়ক।
১. std::stack
std::stack হলো একটি LIFO (Last In, First Out) ডেটা স্ট্রাকচার। এতে সর্বশেষ যোগ করা উপাদানটিই প্রথমে অপসারণ করা যায়। সাধারণত stack কনটেইনার push, pop, top ইত্যাদি অপারেশন সরবরাহ করে।
বৈশিষ্ট্য ও পদ্ধতি:
- push: স্ট্যাকে একটি নতুন উপাদান যোগ করে।
- pop: স্ট্যাকের শীর্ষ উপাদান সরিয়ে দেয়।
- top: স্ট্যাকের শীর্ষ উপাদানটি রেফারেন্স হিসেবে প্রদান করে।
- empty: চেক করে যে স্ট্যাকটি খালি কিনা।
- size: স্ট্যাকের বর্তমান উপাদানের সংখ্যা প্রদান করে।
উদাহরণ:
#include <iostream>
#include <stack>
int main() {
std::stack<int> stk;
stk.push(10);
stk.push(20);
stk.push(30);
while (!stk.empty()) {
std::cout << stk.top() << " "; // শীর্ষ উপাদান প্রদর্শন
stk.pop(); // শীর্ষ উপাদান সরিয়ে নেয়া
}
return 0;
}২. std::queue
std::queue হলো একটি FIFO (First In, First Out) ডেটা স্ট্রাকচার। এতে প্রথমে যোগ করা উপাদানটিই প্রথমে অপসারণ করা যায়। এটি সাধারণত push, pop, front, এবং back অপারেশন সরবরাহ করে।
বৈশিষ্ট্য ও পদ্ধতি:
- push: কিউয়ের শেষ প্রান্তে একটি নতুন উপাদান যোগ করে।
- pop: কিউয়ের সামনের উপাদান সরিয়ে দেয়।
- front: কিউয়ের প্রথম উপাদান রেফারেন্স হিসেবে প্রদান করে।
- back: কিউয়ের শেষ উপাদান রেফারেন্স হিসেবে প্রদান করে।
- empty: চেক করে যে কিউটি খালি কিনা।
- size: কিউয়ের বর্তমান উপাদানের সংখ্যা প্রদান করে।
উদাহরণ:
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(10);
q.push(20);
q.push(30);
while (!q.empty()) {
std::cout << q.front() << " "; // প্রথম উপাদান প্রদর্শন
q.pop(); // প্রথম উপাদান সরিয়ে নেয়া
}
return 0;
}৩. std::priority_queue
std::priority_queue হলো একটি বিশেষ ধরনের কিউ যেখানে উপাদানগুলোকে গুরুত্ব অনুযায়ী সাজানো হয়। সাধারণত সর্বোচ্চ (বা সর্বনিম্ন) মান সর্বপ্রথমে বের করা যায়। এটি ডিফল্টভাবে সর্বোচ্চ মানকে সর্বপ্রথমে প্রদর্শন করে। priority_queue সাধারণত push, pop, এবং top অপারেশন সরবরাহ করে।
বৈশিষ্ট্য ও পদ্ধতি:
- push: কিউয়ে একটি নতুন উপাদান যোগ করে এবং উপাদানগুলোকে সাজিয়ে রাখে।
- pop: সর্বোচ্চ (বা সর্বনিম্ন) মান সরিয়ে দেয়।
- top: সর্বোচ্চ (বা সর্বনিম্ন) মান রেফারেন্স হিসেবে প্রদান করে।
- empty: চেক করে যে কিউটি খালি কিনা।
- size: কিউয়ের বর্তমান উপাদানের সংখ্যা প্রদান করে।
উদাহরণ:
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> pq;
pq.push(10);
pq.push(30);
pq.push(20);
while (!pq.empty()) {
std::cout << pq.top() << " "; // সর্বোচ্চ মান প্রদর্শন
pq.pop(); // সর্বোচ্চ মান সরিয়ে নেয়া
}
return 0;
}নোট: উপরের উদাহরণে সর্বোচ্চ মান প্রথমে প্রিন্ট করা হয় কারণ std::priority_queue ডিফল্টভাবে সর্বোচ্চ মানকে অগ্রাধিকার দেয়। তবে std::greater<int> ব্যবহার করে এটি সর্বনিম্ন মানকে অগ্রাধিকার দিতেও কনফিগার করা যায়।
কনটেইনার অ্যাডাপ্টারের সুবিধাসমূহ
- ডেটা ব্যবস্থাপনার সরলতা:
stack,queue, এবংpriority_queueবিভিন্ন সমস্যা সমাধানের জন্য সরল এবং কার্যকরী উপায়ে ডেটা অ্যাক্সেস ও পরিচালনা করতে সহায়ক। - মেমরি ব্যবহারের দক্ষতা: এই অ্যাডাপ্টারগুলো অন্তর্নিহিত কনটেইনারের উপর ভিত্তি করে কাজ করে, যা মেমরি ব্যবহারের ক্ষেত্রে দক্ষ।
- স্বতন্ত্র কার্যকারিতা: প্রতিটি অ্যাডাপ্টার নির্দিষ্ট কাজের জন্য তৈরি, যেমন
stackLIFO অপারেশন,queueFIFO অপারেশন, এবংpriority_queueডেটা গুরুত্বপূর্ণতার ভিত্তিতে সাজানো রাখে।
এগুলো বিভিন্ন ধরনের ডেটা অ্যাক্সেস প্যাটার্ন বাস্তবায়নের জন্য খুবই সহায়ক, যা প্রোগ্রামিংয়ের বিভিন্ন ক্ষেত্রে অত্যন্ত কার্যকর।
Read more